package com.xAdmin.domain.enums;

/**
 * @author: xiaYZ 2025/3/8
 * @version: 1.0
 */
import lombok.Getter;

/**
 * 会话密钥枚举
 *
 * @author YiZhen.Xia
 * create time: 2025/03/08
 **/
public enum SessionKeyEnum {

    // 用户登录会话
    USER_LOGIN_SESSION("user", "用户session缓存key"),
    USER_SESSION_ID("SESSION:ID:%s", "基于 Session ID 的会话缓存"),
    USER_MENU_LIST("menuList", "用户菜单列表"),

    // 安全相关
    LOGIN_ATTEMPT("SESSION:LOGIN_ATTEMPT:%s", "登录失败尝试次数（防暴力破解）"),
    CAPTCHA_CODE("SESSION:CAPTCHA:%s", "验证码缓存（基于手机号或邮箱）"),

    // 其他场景
    API_TOKEN("SESSION:API:TOKEN:%s", "API 接口访问 Token 缓存"),
    CSRF_TOKEN("SESSION:CSRF:%s", "CSRF Token 缓存（基于 Session ID）");

    // 字段定义
    @Getter
    private final String keyFormat; // session缓存key
    @Getter
    private final String description; // 缓存描述

    // 构造方法
    SessionKeyEnum(String keyFormat, String description) {
        this.keyFormat = keyFormat;
        this.description = description;
    }

    /**
     * 根据参数生成完整的 Key
     * @param args 占位符参数（如用户ID、Session ID 等）
     * @return 完整的 Redis Key
     */
    public String getKey(Object... args) {
        return String.format(this.keyFormat, args);
    }
}

